package common.util;

import static org.apache.commons.lang.StringUtils.isBlank;

import java.math.BigDecimal;
import java.util.Random;
import java.util.UUID;

/**
 * 用于处理字符串的工具类
 * 
 * @author liuxj
 * @version 1.0.0 2014-12-25
 */
public class StringUtils {

    /**
     * 检查指定字符串是否是十进制数
     * 
     * @param str
     *            要检查的字符串
     * @return true：是十进制数，false：非十进制数
     */
    public static boolean isDecimal(String str) {
        str = str.trim();
        int length = str.length();
        char c = '\u0000';

        for (int i = 0; i < length; i++) {
            c = str.charAt(i);
            if (c < '0' || c > '9') {
                return false;
            }
        }

        return true;
    }

    /**
     * 字符串如果为空就给其一个指定的值
     * 
     * @param source
     *            原字符串值
     * @param target
     *            如果为空则替换成该目标值
     * @return 字符串
     */
    public static String replaceNull(String source, String target) {
        if (isBlank(source)) {
            return target;
        } else {
            return source;
        }
    }

    /**
     * 将传入的字符串数组中的所有字符串依次连接成一个字符串并返回
     * 
     * @param strs
     *            要连接的字符串数组
     * @return 连接后的字符串
     */
    public static String concatStrings(String... strs) {
        if (strs == null || strs.length == 0) {
            return null;
        }

        StringBuffer sb = new StringBuffer();
        for (String str : strs) {
            sb.append(str);
        }

        return sb.toString();
    }

    /**
     * 去除字符串前后的半角和全角空格
     * 
     * @param str
     *            源字符串
     * @return 去除前后的半角和全角空格后的字符串
     */
    public static String trim(String str) {
        if (isBlank(str)) {
            return str;
        }

        int start = 0;
        int len = str.length();
        int end = len;

        while ((start < len) && (str.charAt(start) == ' ' || str.charAt(start) == '　')) {
            start++;
        }

        while ((start < end) && (str.charAt(end - 1) == ' ' || str.charAt(end - 1) == '　')) {
            end--;
        }

        return ((start > 0) || (end < len)) ? str.substring(start, end) : str;
    }

    /**
     * 获取UUID
     * 
     * @return UUID
     */
    public static String getUUID() {
        return UUID.randomUUID().toString();
    }

    /**
     * 获取固定长度的随机数
     * 
     * @param length
     *            固定长度
     * @return 随机数
     */
    public static String getFixedLengthRandomNumber(int length) {
        if (length < 1) {
            return null;
        }

        Random random = new Random();
        double pross = (random.nextDouble()) * Math.pow(18, length + 2);

        BigDecimal millis = new BigDecimal(System.currentTimeMillis());
        BigDecimal randomNum = new BigDecimal(pross);
        randomNum.add(millis);

        String code = randomNum.toPlainString();

        return code.substring(0, length);
    }

}
